查询计划

您所在的位置:网站首页 power query的功能包括 查询计划

查询计划

2023-11-11 19:17| 来源: 网络整理| 查看: 265

Power Query 查询计划(预览版) 项目 10/05/2023

Power Query 查询计划是一项提供更好的查询评估视图的功能。 它有助于确定为什么特定查询可能不会在特定步骤折叠。

本文将通过一个实际示例演示使用查询计划功能检查查询步骤的主要用例和潜在好处。 本文中使用的示例是使用 Azure SQL Server 的 AdventureWorksLT 示例数据库创建的,你可以从 AdventureWorks 示例数据库下载该数据库。

注意

Power Query 查询计划功能仅在 Power Query Online 中可用。

本文分为一系列推荐步骤,以便解释查询计划。 这些步骤包括:

查看查询折叠指示器。 选择查询步骤以查看其查询计划。 对查询实施更改。

使用以下步骤在自己的 Power Query Online 环境中创建查询。

从 Power Query - 选择数据源中,选择空白查询。

将空白查询的脚本替换为以下查询。

let Source = Sql.Database("servername", "database"), Navigation = Source{[Schema = "Sales", Item = "SalesOrderHeader"]}[Data], #"Removed other columns" = Table.SelectColumns(Navigation, {"SalesOrderID", "OrderDate", "SalesOrderNumber", "PurchaseOrderNumber", "AccountNumber", "CustomerID", "TotalDue"}), #"Filtered rows" = Table.SelectRows(#"Removed other columns", each [TotalDue] > 1000), #"Kept bottom rows" = Table.LastN(#"Filtered rows", 5) in #"Kept bottom rows"

使用自己的环境的正确名称更改 servername 和 database。

(可选)如果你正在尝试连接到本地环境的服务器和数据库,请确保为该环境配置网关。

选择“下一页”。

在 Power Query 编辑器中,选择配置连接并向数据源提供凭据。

注意

有关连接到 SQL Server 的详细信息,请转到 SQL Server 数据库。

执行这些步骤后,查询将如下图所示。

此查询连接到 SalesOrderHeader 表,并从最后五个订单中选择 TotalDue 值超过 1000 的一些列。

注意

本文使用简化的示例来展示此功能,但本文中所述的概念适用于所有查询。 建议在阅读查询计划之前充分了解查询折叠。 若要了解有关查询折叠的详细信息,请转到查询折叠基础知识。

1. 查看查询折叠指示器。

注意

阅读本部分之前,建议查看关于查询折叠指示器的文章。

此过程的第一步是查看查询并密切关注查询折叠指示器。 目标是查看标记为未折叠的步骤。 然后,可以查看对整体查询进行更改是否可能会使这些转换完全折叠。

对于此示例,只有保留最后几行是无法折叠的步骤,这很容易通过未折叠步骤指示器进行识别。 此步骤也是查询的最后一步。

现在的目标是查看此步骤,并了解要折叠回数据源的内容以及无法折叠的内容。

2. 选择查询步骤以查看其查询计划

你已将保留最后几行步骤标识为感兴趣的步骤,因为此步骤不会折叠回数据源。 右键单击此步骤,并选择查看查询计划选项。 此操作显示一个新对话框,其中包含所选步骤的查询计划的关系图。

Power Query 尝试利用延迟计算和查询折叠来优化查询,如查询折叠基础知识中所述。 此查询计划表示从 M 查询优化转换成发送到数据源的本机查询。 它还包括 Power Query 引擎执行的任何转换。 节点的显示顺序遵循查询的顺序,并从查询的最后一步或输出开始,关系图最左侧显示了此步骤,在本例中为表示保留最后几行步骤的 Table.LastN 节点。

在对话框底部,有一个带有图标的条形图,可帮助你放大或缩小查询计划视图,并且有可帮助你管理视图的其他按钮。 对于上图,此栏中的适应视图选项用于更好地鉴别节点。

注意

查询计划表示优化的计划。 当引擎评估查询时,它会尝试将所有运算符折叠到数据源中。 在某些情况下,它甚至可能会对步骤进行一些内部重新排序以最大程度进行折叠。 考虑到这一点,此优化查询计划中留下的节点/运算符通常包含“折叠的”数据源查询,以及任何无法折叠并在本地评估的运算符。

识别来自其他节点的折叠节点

你可以将此关系图中的节点标识为两个组:

折叠的节点:此节点可能是 Value.NativeQuery 或“数据源”节点,例如 Sql.Database。 还可以使用其函数名称下的标签远程来标识这些标签。 不可折叠的节点:其他表运算符,如 Table.SelectRows、Table.SelectColumns 和其他无法折叠的函数。 这些还可以用标签 完全扫描和流式处理来识别。

下图显示了红色矩形内的折叠节点。 无法将其余节点折叠回数据源。 你将需要查看其余节点,因为目标是尝试让这些节点折叠回数据源。

你可以选择某些节点底部的查看详细信息来显示扩展信息。 例如,Value.NativeQuery 节点的详细信息显示将发送到数据源的本机查询(在 SQL 中)。

此处显示的查询可能与发送到数据源的查询不完全相同,但非常接近。 在这种情况下,它会确切告知将从 SalesOrderHeader 表中查询哪些列,然后如何使用 TotalDue 字段筛选该表,以仅获取该字段的值大于 1000 的行。 它旁边的 Table.LastN 节点由 Power Query 引擎在本地计算,因为它无法折叠。

注意

运算符可能与查询脚本中使用的函数不完全匹配。

查看非折叠节点,并考虑进行相关操作以使转换折叠

现在,你已确定哪些节点无法折叠并将在本地进行评估。 这种情况只有 Table.LastN 节点,但在其他情况下,它可能有更多节点。

目标是将更改应用于查询,以便可以折叠该步骤。 你可能实施的一些更改可能包括从重新安排步骤到对查询应用替代逻辑(对数据源更明确)之间的各项更改。 这并不意味着所有查询和所有操作都可以通过应用一些更改来折叠。 但是,最好通过试验和错误来确定是否可以折叠回查询。

由于数据源是 SQL Server 数据库,因此,如果目标是从表中检索最后五个订单,则利用 SQL 中的 TOP 和 ORDER BY 子句是一个不错的替代方法。 由于 SQL 中没有 BOTTOM 子句, 因此 PowerQuery 中的 Table.LastN 转换无法转换为 SQL。 可以删除 Table.LastN 步骤并将其替换为:

按表中的 SalesOrderID 列进行的降序排序步骤,因为此列确定哪个订单最先输入以及哪个订单最后输入。 选择表排序后的前五行,此转换将完成与保留最后几行 (Table.LastN) 相同的操作。

此替代项等效于原始查询。 虽然理论上此替代项看起来不错,但你需要做出更改,以了解此替代项是否会使此节点完全折叠回数据源。

3. 对查询实施更改

实施上一部分中讨论的替代方案:

关闭查询计划对话框并返回到 Power Query 编辑器。

删除保留最后几行步骤。

按降序顺序对 SalesOrderID 列进行排序。

选择数据预览视图左上角的表图标,然后选择显示为“保留最前面几行”的选项。 在对话框中,将数字 5 作为参数传递并按“确定”。

实施更改后,请再次检查查询折叠指示器,查看它是否提供折叠指示器。

现在是时候查看最后一步的查询计划了,此最后一步现在是保留前几行。 现在只有折叠的节点。 选择 Value.NativeQuery 下面的查看详细信息,以确认正在将哪个查询发送到数据库。

虽然本文建议了要应用的具体替代方案,但主要目标是让你了解如何使用查询计划来研究查询折叠。 本文还提供了发送到数据源的内容以及将在本地完成的转换的可见性。

你可以调整代码以查看它在查询中的影响。 通过使用查询折叠指示器,你还可以更好地了解哪些步骤阻止查询折叠。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3